package mpbe.estructura.secciones.hormigon_armado;

/*
 * Este codigo es software libre y se encuentra licenciado 
 * bajo los términos de la Licencia Pública General de GNU versión 3 
 * según se encuentra publicada por la Free Software Foundation.
 * http://www.gnu.org/licenses/gpl.html
 * 
 * Autor: Martin Pablo Bellanca <martin.bellanca@gmail.com>
 * web: http://mpbe.blogspot.com/
 */

import mpbe.estructura.Material;

import org.json.simple.JSONObject;

public class RectaUltima {
	public int Zona = 0;
	public double Eb1 = 0; // Deformacion de la fibra de hormigon mas comprimida (alejada superior)
	public double Es2 = 0; // Deformacion de la armadura mas tracionada (alejada inferior)
	public double X = 0; // Ubicacion del eje neutro de tensiones (Z1<0, 0<Z234<d, Z5>d)
	public double cg = 0; // Ubicacion del centro de giro de la recta ultima (Z1=no hay, Z2=h, Z34=0, Z5=3/7*h)
	public void set(int Zona, double Eb1, double Es2, double X, double cg){
		this.Zona = Zona;
		this.Eb1 = Eb1;
		this.Es2 = Es2;
		this.X = X;
		this.cg = cg;
	}
	public void copyInto(RectaUltima RU){
		RU.Zona = Zona;
		RU.Eb1 = Eb1;
		RU.Es2 = Es2;
		RU.X = X;
		RU.cg = cg;
	}
	public boolean setLimiteDeZona(int Zona, double d, double h, Material hormigon, Material acero) {
		boolean res = false;
		switch (Zona) {
		case 1: //Recta en tracción pura
			this.Zona = Zona;
			this.Eb1 = acero.El;
			this.Es2 = acero.El;
			this.X = -999999;
			this.cg = d;
			break;
		case 12:
			this.Zona = Zona;
			this.Eb1 = 0;
			this.Es2 = acero.El;
			this.X = 0;
			this.cg = h;
			break;
		case 23:
			this.Zona = Zona;
			this.Eb1 = hormigon.El;
			this.Es2 = acero.El;
			this.X = -h*hormigon.El/(acero.El-hormigon.El); // para Ela=5 y Elh=-3.5, X=d*7/17
			this.cg = 0;
			break;
		case 45:
			this.Zona = Zona;
			this.Eb1 = hormigon.El;
			this.Es2 = getEslim45(d, h, hormigon.El);
			this.X = d;
			this.cg = d*(1-hormigon.Ese/hormigon.El); // para Ese=-2 y El=-3.5, Cg=d*3/7
			break;
		case 5: //Recta en compresión pura
			this.Zona = Zona;
			this.Eb1 = hormigon.Ese;
			this.Es2 = hormigon.Ese;
			this.X = 999999;
			this.cg = d*(1-hormigon.Ese/hormigon.El); // para Ese=-2 y El=-3.5, Cg=d*3/7
			break;
		default:
			res = false;
		}	
		return res;
	}
	public double getEslim45(double d, double h, double Elh){
		return Elh * (1 - h / d);
	}
	
	//*****************************************************
	// Funciones JSON
	//*****************************************************
	public void put_JSON(JSONObject jo){
		long zaux = (Long) jo.get("Zona");  
		Zona = (int) zaux;
		Eb1 = (Double) jo.get("Eb1");
		Es2 = (Double) jo.get("Es2");
		X = (Double) jo.get("X");
		cg = (Double) jo.get("cg");
	}
	public JSONObject get_JSONObject() {
		JSONObject jo = new JSONObject();
		jo.put("Zona", Zona);
		jo.put("Eb1", Eb1);
		jo.put("Es2", Es2);
		jo.put("X", X);
		jo.put("cg", cg);
		return jo;
	}
	public String get_JSONString() {
		String res = "{\"Zona\":"+Zona+", ";
		res += "\"Eb1\":"+Eb1+", ";
		res += "\"Es2\":"+Es2+", ";
		res += "\"X\":"+X+", ";
		res += "\"cg\":"+cg+"}";
		return res;
	}
}
